// 知识点1：使用容器存放继承体系中的对象时，必须采用简介存储的方式，因为不允许保存类型不相同的元素，如若我们保存了一个quote对象，再传入一个bulk_quote，那么其派生类的部分将会被忽略掉

// 知识点2：可以使用指向类类型对象的指针存放入容器，最好使用智能指针，管理动态类型

// 这题把我给气的，难受死~~~~

// 记住27题要求写继承自基类的构造函数，千万别忘了，不然其移动或者拷贝函数继承的是基类的，其派生类的部分会默认初始化，答案就是一样的了！！！记住将你写的继承的构造函数注释掉！！！
#include "ex15_28.h"
#include <algorithm>
#include <iostream>
#include <memory>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char **argv) {
  vector<Quote> vec1;
  string a("C++ Primer I");
  string b("C++ Primer II");
  string c("C++ Primer III");
  string d("C++ Primer IV");
  bulk_quote b1(a, 128, 10, 0.5);
  bulk_quote b2(b, 118, 8, 0.6);
  bulk_quote b3(c, 108, 12, 0.4);
  bulk_quote b4(d, 138, 4, 0.3);
  vec1.push_back(b1);
  vec1.push_back(b2);
  vec1.push_back(b3);
  vec1.push_back(b4);
  double Sum_of_net_price1 = 0;
  for (int i = 0; i < vec1.size(); ++i) {
    Sum_of_net_price1 += vec1[i].net_price(20);
    cout << Sum_of_net_price1 << endl;
  }
  cout << "The total net price is:" << Sum_of_net_price1 << endl;

  vector<shared_ptr<Quote>> vec2;
  vec2.push_back(make_shared<bulk_quote>(b1));
  vec2.push_back(make_shared<bulk_quote>(b2));
  vec2.push_back(make_shared<bulk_quote>(b3));
  vec2.push_back(make_shared<bulk_quote>(b4));
  double Sum_of_net_price2 = 0;
  for (int i = 0; i < vec2.size(); ++i) {
    Sum_of_net_price2 += vec2[i]->net_price(20);
    cout << Sum_of_net_price2 << endl;
  }
  cout << "The total net price is:" << Sum_of_net_price2 << endl;

  return 0;
}